DROP TABLE AUFTRAG CASCADE CONSTRAINTS;

DROP SEQUENCE AUFTRAG_SEQ;

DROP TABLE HISTORIE CASCADE CONSTRAINTS;

DROP SEQUENCE HISTORIE_SEQ;

DROP TABLE METADATEN CASCADE CONSTRAINTS;

DROP SEQUENCE METADATEN_SEQ;

DROP TABLE POSTKORB CASCADE CONSTRAINTS;

DROP SEQUENCE POSTKORB_SEQ;

DROP TABLE UEBERSETZUNG CASCADE CONSTRAINTS;

DROP SEQUENCE UEBERSETZUNG_SEQ;

CREATE TABLE AUFTRAG 
(
  AUFTRAG_ID NUMBER NOT NULL 
, AUFTRAG_BOID VARCHAR2(20 CHAR) NOT NULL 
, AUFTRAG_TYP VARCHAR2(20 CHAR) NOT NULL 
, AUFTRAG_STATUS VARCHAR2(20 CHAR) NOT NULL 
, POSTKORB VARCHAR2(20 CHAR) 
, KUNDEN_NR VARCHAR2(40 CHAR) 
, EINGANGSKANAL VARCHAR2(20 CHAR) NOT NULL 
, BEMERKUNGEN NVARCHAR2(2000) 
, EINGANG_DATUM DATE NOT NULL 
, ABSCHLUSS_DATUM DATE 
, CONSTRAINT AUFTRAG_PK PRIMARY KEY 
  (
    AUFTRAG_ID 
  )
  ENABLE 
);

CREATE TABLE HISTORIE 
(
  HISTORIE_ID NUMBER NOT NULL 
, TYP VARCHAR2(20 CHAR) NOT NULL 
, BOID VARCHAR2(20 CHAR) NOT NULL 
, USER_ID VARCHAR2(20 CHAR) NOT NULL 
, DATUM DATE NOT NULL 
, TEXT NVARCHAR2(2000) NOT NULL 
, CONSTRAINT HISTORIE_PK PRIMARY KEY 
  (
    HISTORIE_ID 
  )
  ENABLE 
);

CREATE TABLE METADATEN 
(
  METADATEN_ID NUMBER NOT NULL 
, METADATEN_BOID VARCHAR2(20 CHAR) NOT NULL 
, TYP VARCHAR2(20 CHAR) NOT NULL 
, BEZEICHNUNG_KEY VARCHAR2(40 CHAR) NOT NULL 
, CONSTRAINT METADATEN_PK PRIMARY KEY 
  (
    METADATEN_ID 
  )
  ENABLE 
);

CREATE TABLE POSTKORB 
(
  POSTKORB_ID NUMBER NOT NULL 
, POSTKORB_BOID VARCHAR2(20 CHAR) NOT NULL 
, POSTKORB_TYP VARCHAR2(20 CHAR) NOT NULL 
, BEZEICHNUNG_KEY VARCHAR2(40 CHAR) NOT NULL 
, AKTIV NUMBER NOT NULL 
, CONSTRAINT POSTKORB_PK PRIMARY KEY 
  (
    POSTKORB_ID 
  )
  ENABLE 
);

CREATE TABLE UEBERSETZUNG 
(
  UEBERSETZUNG_ID NUMBER NOT NULL 
, UEBERSETZUNG_KEY VARCHAR2(40 CHAR) NOT NULL 
, UEBERSETZUNG_VALUE NVARCHAR2(2000) 
, SPRACHE VARCHAR2(2) NOT NULL 
, CONSTRAINT UEBERSETZUNG_PK PRIMARY KEY 
  (
    UEBERSETZUNG_ID 
  )
  ENABLE 
);

ALTER TABLE AUFTRAG
ADD CONSTRAINT AUFTRAG_BOID_UK UNIQUE 
(
  AUFTRAG_BOID 
)
ENABLE;

ALTER TABLE METADATEN
ADD CONSTRAINT METADATEN_BOID_UK UNIQUE 
(
  METADATEN_BOID 
)
ENABLE;

ALTER TABLE POSTKORB
ADD CONSTRAINT POSTKORB_BOID_UK UNIQUE 
(
  POSTKORB_BOID 
)
ENABLE;

CREATE SEQUENCE AUFTRAG_SEQ;

CREATE SEQUENCE HISTORIE_SEQ;

CREATE SEQUENCE METADATEN_SEQ;

CREATE SEQUENCE POSTKORB_SEQ;

CREATE SEQUENCE UEBERSETZUNG_SEQ;

CREATE OR REPLACE PROCEDURE SET_APP_USER_LANG (
    USER_LANG IN VARCHAR2 )
AS
BEGIN
  dbms_application_info.set_client_info(USER_LANG);
EXCEPTION
WHEN OTHERS THEN
  raise_application_error (-20001, 'Error in SET_APP_USER_LANG: ' || SQLERRM);
END SET_APP_USER_LANG;
/

CREATE OR REPLACE TRIGGER AUFTRAG_TRG 
BEFORE INSERT ON AUFTRAG 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF :NEW.AUFTRAG_ID IS NULL THEN
      SELECT AUFTRAG_SEQ.NEXTVAL INTO :NEW.AUFTRAG_ID FROM DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;
/

CREATE OR REPLACE TRIGGER HISTORIE_TRG 
BEFORE INSERT ON HISTORIE 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF :NEW.HISTORIE_ID IS NULL THEN
      SELECT HISTORIE_SEQ.NEXTVAL INTO :NEW.HISTORIE_ID FROM DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;
/

CREATE OR REPLACE TRIGGER METADATEN_TRG 
BEFORE INSERT ON METADATEN 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF :NEW.METADATEN_ID IS NULL THEN
      SELECT METADATEN_SEQ.NEXTVAL INTO :NEW.METADATEN_ID FROM DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;
/

CREATE OR REPLACE TRIGGER POSTKORB_TRG 
BEFORE INSERT ON POSTKORB 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF :NEW.POSTKORB_ID IS NULL THEN
      SELECT POSTKORB_SEQ.NEXTVAL INTO :NEW.POSTKORB_ID FROM DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;
/

CREATE OR REPLACE TRIGGER UEBERSETZUNG_TRG 
BEFORE INSERT ON UEBERSETZUNG 
FOR EACH ROW 
BEGIN
  <<COLUMN_SEQUENCES>>
  BEGIN
    IF :NEW.UEBERSETZUNG_ID IS NULL THEN
      SELECT UEBERSETZUNG_SEQ.NEXTVAL INTO :NEW.UEBERSETZUNG_ID FROM DUAL;
    END IF;
  END COLUMN_SEQUENCES;
END;
/
